package com.docparser.converters;

/**
 * 处理HTML文档的生成，支持MathJax数学公式渲染。
 * 创建可以使用MathJax库渲染LaTeX公式的HTML页面。
 */
public class HtmlConverter {
    private final StringBuilder html;

    /**
     * 创建新的HTML转换器并初始化HTML文档结构。
     */
    public HtmlConverter() {
        this.html = new StringBuilder();
        initializeHtml();
    }

    /**
     * 初始化HTML文档，添加所需的头部和脚本。
     * 设置MathJax和基本样式用于公式渲染。
     */
    private void initializeHtml() {
        html.append("<!DOCTYPE html>\n");
        html.append("<html>\n<head>\n");
        html.append("<meta charset='UTF-8'>\n");
        html.append("<title>文档公式解析器</title>\n");
        html.append("<script src='https://cdn.polyfill.io/v3/polyfill.min.js'></script>\n");
        html.append("<script id='MathJax-script' async src='https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js'></script>\n");
        html.append("<style>body { padding: 20px; }</style>\n");
        html.append("</head>\n<body>\n");
    }

    /**
     * 向HTML文档添加LaTeX公式。
     * 公式将在页面加载时由MathJax渲染。
     * 每个公式都被包裹在LaTeX显示数学分隔符（\[...\]）中。
     *
     * @param formula 要添加到文档中的LaTeX公式
     */
    public void addFormula(String formula) {
        if (formula != null && !formula.isEmpty()) {
            html.append("<p>\\[").append(formula).append("\\]</p>\n");
        }
    }

    /**
     * 返回完整的HTML文档字符串。
     * 包含所有必需的MathJax脚本和已添加的公式。
     * 关闭所有HTML标签并确保正确的文档结构。
     *
     * @return 完整的HTML文档字符串
     */
    public String getHtml() {
        StringBuilder result = new StringBuilder(html);
        result.append("</body>\n</html>");
        return result.toString();
    }
}
